home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 1 / Gold Medal Software Volume 1 (Gold Medal) (1994).iso / prog / tpwprog6.arj / DYNAMENU.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-07-02  |  3.8 KB  |  149 lines

  1. { dynamenu.pas -- Dynamic menus that change at runtime }
  2.  
  3. program DM;
  4.  
  5. {$R dynamenu.res}
  6.  
  7. uses WinTypes, WinProcs, WObjects;
  8.  
  9. const
  10.  
  11.   menu_Options  = 0;     { Position of 'Options' in menu bar }
  12.   menu_Advanced = 1;     { Position of 'Advanced' in menu bar }
  13.  
  14.   id_Menu      = 100;    { Menu resource ID }
  15.   cm_FullMenus = 101;    { Command IDs }
  16.   cm_Quit      = 102;
  17.   cm_Item1     = 103;
  18.   cm_Item2     = 104;
  19.  
  20. type
  21.  
  22.   DMApplication = object(TApplication)
  23.     procedure InitMainWindow; virtual;
  24.   end;
  25.  
  26.   PDMWindow = ^DMWindow;
  27.   DMWindow = object(TWindow)
  28.     UsingFullMenus: Boolean;
  29.     constructor Init(AParent: PWindowsObject; ATitle: PChar);
  30.     procedure EnableFullMenus;
  31.     procedure DisableFullMenus;
  32.     procedure CMFullMenus(var Msg: TMessage);
  33.       virtual cm_First + cm_FullMenus;
  34.     procedure CMQuit(var Msg: TMessage);
  35.       virtual cm_First + cm_Quit;
  36.     procedure CMItem1(var Msg: TMessage);
  37.       virtual cm_First + cm_Item1;
  38.     procedure CMItem2(var Msg: TMessage);
  39.       virtual cm_First + cm_Item2;
  40.   end;
  41.  
  42.  
  43. { DMApplication }
  44.  
  45. {- Initialize DMApplication object's window }
  46. procedure DMApplication.InitMainWindow;
  47. begin
  48.   MainWindow := New(PDMWindow, Init(nil, 'Dynamic Menus'))
  49. end;
  50.  
  51.  
  52. { DMWindow }
  53.  
  54. {- Construct DMWindow object }
  55. constructor DMWindow.Init(AParent: PWindowsObject; ATitle: PChar);
  56. begin
  57.   TWindow.Init(AParent, ATitle);
  58.   Attr.Menu := LoadMenu(HInstance, PChar(id_Menu));
  59.   UsingFullMenus := false
  60. end;
  61.  
  62. {- Add Exit command and Advanced menu }
  63. procedure DMWindow.EnableFullMenus;
  64. var
  65.   Mh: HMenu;  { Menu handle }
  66. begin
  67. {- Get handle to Options menu and append Exit command }
  68.   Mh := GetSubMenu(Attr.Menu, menu_Options);
  69.   AppendMenu(Mh, mf_String, cm_Quit, 'E&xit');
  70. {- Add new Advanced menu and two sub commands }
  71.   Mh := CreatePopupMenu;
  72.   if Mh <> 0 then
  73.   begin
  74.     AppendMenu(Attr.Menu, mf_Popup, Mh, '&Advanced');
  75.     AppendMenu(Mh, mf_String or mf_Enabled, cm_Item1, 'Item1');
  76.     AppendMenu(Mh, mf_String or mf_Grayed, cm_Item2, 'Item2')
  77.   end;
  78. {- Redraw menu bar after making changes }
  79.   DrawMenuBar(HWindow)
  80. end;
  81.  
  82. {- Remove Exit command and Advanced menu }
  83. procedure DMWindow.DisableFullMenus;
  84. var
  85.   Mh: HMenu;  { Menu handle }
  86. begin
  87. {- Remove Exit command from Options menu }
  88.   Mh := GetSubMenu(Attr.Menu, menu_Options);
  89.   DeleteMenu(Mh, cm_Quit, mf_ByCommand);
  90. {- Delete Advanced menu and its sub commands }
  91.   DeleteMenu(Attr.Menu, menu_Advanced, mf_ByPosition);
  92.   DrawMenuBar(HWindow)
  93. end;
  94.  
  95. {- Toggle full menus on and off }
  96. procedure DMWindow.CMFullMenus(var Msg: TMessage);
  97. var
  98.   WCheck: Word;
  99. begin
  100.   if UsingFullMenus then
  101.   begin
  102.     DisableFullMenus;
  103.     WCheck := mf_ByCommand or mf_Unchecked;
  104.     UsingFullMenus := false
  105.   end else
  106.   begin
  107.     EnableFullMenus;
  108.     WCheck := mf_ByCommand or mf_Checked;
  109.     UsingFullMenus := true
  110.   end;
  111.   CheckMenuItem(Attr.Menu, cm_FullMenus, WCheck)
  112. end;
  113.  
  114. {- Execute Options:Exit command }
  115. procedure DMWindow.CMQuit(var Msg: TMessage);
  116. begin
  117.   CloseWindow
  118. end;
  119.  
  120. {- Execute Advanced:Item1 command }
  121. procedure DMWindow.CMItem1(var Msg: TMessage);
  122. begin
  123.   EnableMenuItem(Attr.Menu, cm_Item2, mf_ByCommand or mf_Enabled);
  124.   EnableMenuItem(Attr.Menu, cm_Item1, mf_ByCommand or mf_Grayed)
  125. end;
  126.  
  127. {- Execute Advanced:Item2 command }
  128. procedure DMWindow.CMItem2(var Msg: TMessage);
  129. begin
  130.   EnableMenuItem(Attr.Menu, cm_Item1, mf_ByCommand or mf_Enabled);
  131.   EnableMenuItem(Attr.Menu, cm_Item2, mf_ByCommand or mf_Grayed)
  132. end;
  133.  
  134. var
  135.  
  136.   DMApp: DMApplication;
  137.  
  138. begin
  139.   DMApp.Init('DMApp');
  140.   DMApp.Run;
  141.   DMApp.Done
  142. end.
  143.  
  144.  
  145. {--------------------------------------------------------------
  146.   Copyright (c) 1991 by Tom Swan. All rights reserved.
  147.   Revision 1.00    Date: 2/20/1991
  148. ---------------------------------------------------------------}
  149.